1. 题目描述(中等难度)

[warning] 150. 逆波兰表达式求值

根据 逆波兰表示法,求表达式的值。 有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。

说明:

  • 整数除法只保留整数部分。
  • 给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。

2. 解法一: 栈

思路: 解决这道题,主要是知道什么是逆波兰表达式,也就是中缀表达式。

我们先看一个例子...后缀表达式3 4 + 5 × 6 -的计算

  • 1.从左至右扫描,将3和4压入堆栈;
  • 2.遇到+运算符,因此弹出4和3(4为栈顶元素,3为次顶元素,注意与前缀表达式做比较),计算出3+4的值,得7,再将7入栈;
  • 3.将5入栈;
  • 4.接下来是×运算符,因此弹出5和7,计算出7×5=35,将35入栈;
  • 5.将6入栈;
  • 6.最后是-运算符,计算出35-6的值,即29,由此得出最终结果。

注意: 加法和减法可以不考虑顺序问题进行操作,除法和减法,是使用次顶元素进行除或者减操作

class Solution {
    public int evalRPN(String[] tokens) {
     Deque<Integer> deque = new ArrayDeque<>();
     for(String s : tokens){
       if(s.equals("+")){
          deque.offerLast(deque.pollLast()+deque.pollLast());
       }
       else if(s.equals("*")){
           deque.offerLast(deque.pollLast()*deque.pollLast());
       }
       else if(s.equals("/")){
           int n1 = deque.pollLast();
           int n2 = deque.pollLast();
           deque.offerLast(n2/n1);
       }
       else if(s.equals("-")){
           deque.offerLast(-deque.pollLast()+deque.pollLast());
       }
       else{
           deque.offerLast(Integer.valueOf(s));
       }
     }
     return deque.pollLast();
    }
}
© gaohueric all right reserved,powered by Gitbook文件修订时间: 2021-12-08 23:22:22

results matching ""

    No results matching ""